home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Whiteline: delta
/
whiteline CD Series - delta.iso
/
progtool
/
modula2
/
module
/
windemo.mod
< prev
next >
Wrap
Text File
|
1995-11-25
|
17KB
|
431 lines
MODULE WinDemo;
FROM SYSTEM IMPORT ADR,ADDRESS,VAL,SHORT;
FROM Applications IMPORT Init,Terminate,deskx,desky,deskw,deskh,
InitResource,ShowMenuBar,ShowNormal,DeskTree,
MenuTree,Colour,Appl;
FROM KbdEvnt IMPORT MenuSearch;
FROM AES IMPORT ResourceGetAddr,ObjectChange,ObjectFind,FormAlert,
GrafMouse,EventMultiple,FormDialogue,GrafDragBox,
WindowFind,GrafRubberBox,MenuBar,WindowGet,
MenuTitleNormal;
FROM WindowMenue IMPORT InstallMenu,MenuX,MenuY,MenuW,MenuH;
FROM WinIcon IMPORT CreateIconWindow,OpenIconWindow,InstallIcon;
FROM EasyDialog IMPORT and, DoMoveDialog,GetObjectState,IsSelected;
FROM EasyWindows IMPORT TerminateWindows,windowtype,windowlist,
wstring,createWindow,openWindow,AllElements,
RedrawProcType,rectangle,DoRedraw,topWindow,clearWindow,setWindow,
closeWindow,fullWindow,WriteStr,Effects;
FROM WindowDialogue IMPORT OpenWindowDial,CloseWindowDial,DoWindowDial;
FROM GEMAESbase IMPORT Arrow,PointHand,FlatHand, MesageEvent,TimerEvent,KeyboardEvent,
ButtonEvent,MenuSelected,Top,Mouse1Event,Mouse2Event,
WindowRedraw, WindowTopped, WindowClosed, WindowFulled,
WindowArrowed, WindowHorizSlided, WindowVertSlided,
WindowSized, WindowMoved, WindowNewTop, WindowKind,
Selected,Black,White;
VAR RSCfileName : ARRAY[1..12] OF CHAR;
ENDE : BOOLEAN;
MenuAdr,txtAdr,grafAdr : ADDRESS;
InfoAdr : ADDRESS;
Info1Adr : ADDRESS;
Info2Adr : ADDRESS;
win1,win2,win3 :INTEGER;
OK : BOOLEAN;
Mo1h : INTEGER;
WinMenuAktiv : BOOLEAN;
CONST
TREE1 = 0; (* TREE *)
TREE2 = 1; (* TREE *)
MENABOUT = 2; (* TREE *)
TREE4 = 3; (* TREE *)
TREE5 = 4; (* TREE *)
WINABOUT = 5; (* TREE *)
TREE7 = 6; (* TREE *)
ABOUTMEN = 7; (* OBJECT in TREE #0 *)
WINDOW = 18; (* OBJECT in TREE #0 *)
MENUWIN = 19; (* OBJECT in TREE #0 *)
TEXTWIN = 21; (* OBJECT in TREE #0 *)
GRAFWIN = 20; (* OBJECT in TREE #0 *)
QUIT = 16; (* OBJECT in TREE #0 *)
ABOUTWIN = 9; (* OBJECT in TREE #1 *)
CLOSE = 18; (* OBJECT in TREE #1 *)
LINKSBUE = 4; (* OBJECT in TREE #3 *)
CENTRIER = 8; (* OBJECT in TREE #3 *)
RECHTSBU = 6; (* OBJECT in TREE #3 *)
BLOCKSAZ = 2; (* OBJECT in TREE #3 *)
NORMAL = 14; (* OBJECT in TREE #3 *)
KURSIV = 18; (* OBJECT in TREE #3 *)
FETT = 12; (* OBJECT in TREE #3 *)
UNDERLIN = 16; (* OBJECT in TREE #3 *)
OUTLINED = 10; (* OBJECT in TREE #3 *)
MAUER = 1; (* OBJECT in TREE #4 *)
ATARI = 2; (* OBJECT in TREE #4 *)
KUGELN = 3; (* OBJECT in TREE #4 *)
FISCHGRE = 4; (* OBJECT in TREE #4 *)
KACHEL = 5; (* OBJECT in TREE #4 *)
BAEUME = 6; (* OBJECT in TREE #4 *)
CHECKBOX = 19; (* OBJECT in TREE #1 *)
ə
PROCEDURE WindowEvent(Message:ARRAY OF INTEGER;ID:INTEGER ):BOOLEAN;
VAR Window : INTEGER;
x,y,w,h :INTEGER;
x0,y0,w0,h0 :INTEGER;
BEGIN
(* Für welches Fenster ist die Meldung?*)
Window :=Message[3];
IF Window#0 THEN
CASE Message[0] OF
WindowRedraw : (* Window needs redrawing *)
DoRedraw(Message[3],Message[4],Message[5],
Message[6],Message[7],TRUE);
| WindowTopped , (* A window was moved to the top *)
WindowNewTop : (* Window was moved to top (activated) *)
topWindow(Window);
(* Menü wieder einschalten bzw WindowMenü ausschalten! *)
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
| WindowClosed : (* Window was closed *)
closeWindow(Window);
(* Menü wieder einschalten bzw WindowMenü ausschalten! *)
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
| WindowFulled : (* Wndow was fulled *)
fullWindow(Window);
| WindowArrowed : (* Window was arrowed *)
| WindowHorizSlided : (* Horizontal slider was moved *)
| WindowVertSlided : (* Vertical slider was moved *)
| WindowSized , (* Window was sized *)
WindowMoved : (* Window was moved *)
setWindow(Window,Message[4],Message[5],
Message[6],Message[7]);
(* Redraw erzwingen ! => WindowMenüzeilen werden wieder eingeschaltet *)
FormDialogue(0,0,0,0,0,Message[4],Message[5],Message[6],Message[7]);
FormDialogue(3,0,0,0,0,Message[4],Message[5],Message[6],Message[7]);
ELSE
RETURN FALSE
END(*CASE*);
RETURN TRUE
ELSE
RETURN FALSE
END(*IF*);
END WindowEvent;
PROCEDURE redwin(win:INTEGER; r:rectangle);
BEGIN
clearWindow(win);
END redwin;
PROCEDURE redMenwin(win:INTEGER; r:rectangle);
VAR Window :windowtype;
OK :BOOLEAN;
BEGIN
clearWindow(win);
IF windowlist[win]^.ontop THEN
OK:=InstallMenu(win,windowlist[win]^.reference);
Mo1h:=desky;(* Aktive Menüzeile liegt im Fenster => Überwachung für Menüzeile wieder einschalten *)
WinMenuAktiv:=TRUE;
END(*IF*);
END redMenwin;
PROCEDURE redIconWin(win :INTEGER; r:rectangle);
VAR I : INTEGER;
BEGIN
clearWindow(win);
FOR I:= 3 TO 10 DO
WriteStr(win,I,I,"Test Text");
END(*FOR*);
InstallIcon(win,r);
END redIconWin;
PROCEDURE DoGrafIconDia(window,mousex,mousey :INTEGER);
VAR Index : INTEGER;
State : INTEGER;
win : windowtype;
i : INTEGER;
BEGIN
win := windowlist[window]^;
Index:=ObjectFind(windowlist[window]^.reference,0,8,mousex,mousey);
State:= GetObjectState(windowlist[window]^.reference,Index);
IF and(State,Selected) AND (Index>0) THEN
ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
win.work.y,win.work.w,win.work.h,State-Selected,1);
windowlist[window]^.InteriorStyle:=1C;
windowlist[window]^.FillStyle:=1C;
windowlist[window]^.colour:=White;
ELSIF ~and(State,Selected) AND (Index>0) THEN
windowlist[window]^.InteriorStyle:=2C;
windowlist[window]^.colour:=Black;
FOR i := MAUER TO BAEUME DO
IF IsSelected(i,win.reference) THEN
ObjectChange(windowlist[window]^.reference,i,0,win.work.x,
win.work.y,win.work.w,win.work.h,
GetObjectState(win.reference,i)-Selected,1);
END(*IF*);
END(*FOR*);
ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
win.work.y,win.work.w,win.work.h,State+Selected,1);
IF MAUER = Index THEN
windowlist[window]^.FillStyle:=CHR(9)
ELSIF ATARI = Index THEN
windowlist[window]^.FillStyle:=CHR(10);
ELSIF KUGELN = Index THEN
windowlist[window]^.FillStyle:=CHR(19);
ELSIF FISCHGRE = Index THEN
windowlist[window]^.FillStyle:=CHR(16)
ELSIF KACHEL = Index THEN
windowlist[window]^.FillStyle:=CHR(22)
ELSIF BAEUME = Index THEN
windowlist[window]^.FillStyle:=CHR(12)
END(*IF*);
END(*IF*);
IF Index>0 THEN
FormDialogue(0,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
FormDialogue(3,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
END(*IF*);
END DoGrafIconDia;
PROCEDURE DoTextIconDia(window,mousex,mousey :INTEGER);
VAR Index : INTEGER;
State : INTEGER;
win : windowtype;
BEGIN
win := windowlist[window]^;
Index:=ObjectFind(windowlist[window]^.reference,0,8,mousex,mousey);
State:= GetObjectState(windowlist[window]^.reference,Index);
IF and(State,Selected) AND (Index>1) THEN
ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
win.work.y,win.work.w,win.work.h,State-Selected,1);
IF Index = NORMAL THEN
EXCL(windowlist[window]^.texteffects,Shaded);
ELSIF Index = KURSIV THEN
EXCL(windowlist[window]^.texteffects,Italic);
ELSIF Index = FETT THEN
EXCL(windowlist[window]^.texteffects,Bold);
ELSIF Index = UNDERLIN THEN
EXCL(windowlist[window]^.texteffects,Underlined);
ELSIF Index = OUTLINED THEN
EXCL(windowlist[window]^.texteffects,Outlined);
END(*IF*);
ELSIF ~and(State,Selected) AND (Index>1) THEN
ObjectChange(windowlist[window]^.reference,Index,0,win.work.x,
win.work.y,win.work.w,win.work.h,State+Selected,1);
IF Index = NORMAL THEN
INCL(windowlist[window]^.texteffects,Shaded);
ELSIF Index = KURSIV THEN
INCL(windowlist[window]^.texteffects,Italic);
ELSIF Index = FETT THEN
INCL(windowlist[window]^.texteffects,Bold);
ELSIF Index = UNDERLIN THEN
INCL(windowlist[window]^.texteffects,Underlined);
ELSIF Index = OUTLINED THEN
INCL(windowlist[window]^.texteffects,Outlined);
END(*IF*);
END(*IF*);
IF Index>0 THEN
FormDialogue(0,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
FormDialogue(3,0,0,0,0,win.work.x, win.work.y,win.work.w,win.work.h);
END(*IF*);
END DoTextIconDia;
PROCEDURE Auswahl;
VAR formret : INTEGER;
String : ARRAY [0..127] OF CHAR;
message :INTEGER;
events,flag,mx,my,mbutton,mstate,scancode,mclicks,u:INTEGER;
MX,MY,MW,MH : INTEGER;
Mo1x,Mo1w,Mo1y : INTEGER;
RetChar : CHAR;
s:wstring;
rd :RedrawProcType;
MsgBuf :ARRAY[0..7] OF INTEGER;
ok : BOOLEAN;
w: INTEGER;
BEGIN
flag :=MesageEvent+TimerEvent+KeyboardEvent+ButtonEvent+Mouse1Event+Mouse2Event;
ResourceGetAddr(0,MENABOUT,InfoAdr);
ResourceGetAddr(0,WINABOUT,Info1Adr);
ResourceGetAddr(0,TREE7,Info2Adr);
ResourceGetAddr(0,TREE2,MenuAdr);
ResourceGetAddr(0,TREE5,grafAdr);
ResourceGetAddr(0,TREE4,txtAdr);
Mo1x:=0;Mo1y:=0;Mo1h:=desky;Mo1w:=deskw;
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
WinMenuAktiv:=FALSE;
REPEAT
ENDE := FALSE;
events:=EventMultiple(flag,2,03,01,
0,Mo1x,Mo1y,Mo1w,Mo1h,(* wartet darauf das Maus sich in die Menüzeile bewegt *)
0,MX,MY,MW,MH,(* wartet darauf das Maus WindowMenü betritt *)
ADR(MsgBuf),
10000,0,(* Timer Event*)
mx,my,
mbutton,mstate,scancode,mclicks);
IF and(events,MesageEvent)THEN
IF MsgBuf[0]=MenuSelected THEN
message:= MsgBuf[4];
IF ~WinMenuAktiv THEN
CASE message OF
ABOUTMEN : IF win1<1 THEN
s:=" Menu-Info ";
win1:=OpenWindowDial(InfoAdr,s);
ELSE
topWindow(win1);
END(*IF*);
(* Menü wieder einschalten bzw WindowMenü ausschalten! *)
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
formret:=DoWindowDial(Appl,win1,InfoAdr,0);
IF formret>0 THEN CloseWindowDial(win1); END(*IF*);
|QUIT : ENDE := TRUE
|WINDOW : s:="Window-Demo";
rd:=redwin;
createWindow(u,00,00,00,00,AllElements,s,FALSE,rd);
openWindow(u,00,00,00,00);
(* Menü wieder einschalten bzw WindowMenü ausschalten! *)
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
|MENUWIN : s:=" Window with Menubar ";
rd:=redMenwin;
createWindow(u,00,00,00,00,AllElements,s,FALSE,rd);
openWindow(u,300,200,300,100);
ok:=InstallMenu(u,MenuAdr);
WinMenuAktiv:=TRUE;
Mo1h:=desky;
|TEXTWIN : s:= " Window mit IconLeiste ";
rd:=redIconWin;
u:=CreateIconWindow(txtAdr,s,00,00,00,00,rd,AllElements);
OpenIconWindow(u,100,100,110,110);
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
|GRAFWIN : s:= " Window mit IconLeiste ";
rd:=redIconWin;
u:=CreateIconWindow(grafAdr,s,00,00,00,00,rd,AllElements);
OpenIconWindow(u,100,100,100,100);
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
ELSE
END(*CASE*);
ShowNormal(MsgBuf[3]);
ELSE
CASE message OF
ABOUTWIN : IF win2<1 THEN
s:=" Window-Info ";
win2:=OpenWindowDial(Info1Adr,s);
ELSE
topWindow(win2);
END(*IF*);
(* Menü wieder einschalten bzw WindowMenü ausschalten! *)
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
formret:=DoWindowDial(Appl,win2,Info1Adr,0);
IF formret>0 THEN CloseWindowDial(win2); END(*IF*);
|CHECKBOX : IF win3<1 THEN
s:=" Window-Checkbox ";
win3:=OpenWindowDial(Info2Adr,s);
ELSE
topWindow(win3);
END(*IF*);
(* Menü wieder einschalten bzw WindowMenü ausschalten! *)
ShowMenuBar(TRUE);
WinMenuAktiv:=FALSE;
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
formret:=DoWindowDial(Appl,win3,Info2Adr,0);
IF formret>0 THEN CloseWindowDial(win3); END(*IF*);
|CLOSE : ENDE := TRUE
ELSE
END(*CASE*);
MenuTitleNormal(MenuAdr,MsgBuf[3],1)
END(*IF*);
ELSE
ok:=WindowEvent(MsgBuf,Appl);
END(*IF*);
ELSIF and(events,KeyboardEvent) THEN
IF ~MenuSearch(Appl,MenuTree,mstate,scancode,RetChar) THEN
IF RetChar=33C THEN (* ESC-Taste gedrückt!*)
ShowMenuBar(FALSE);
(* Hier wird ein Kommplett Redraw erzwungen ! *)
FormDialogue(0,0,0,0,0,deskx,desky,deskw,deskh);
FormDialogue(3,0,0,0,0,deskx,desky,deskw,deskh);
(* Menü wieder einschalten *)
ShowMenuBar(TRUE);
END(*IF*);
END(*IF*);
ELSIF and(events,Mouse1Event) THEN
(* Menü wieder einschalten *)
ShowMenuBar(TRUE);
Mo1h:=0; (* Menüzeile ist aktiv -> Braucht nicht nochmals aktiviert zu werden *)
MX:=MenuX;MY:=MenuY;MH:=MenuH;MW:=MenuW;(* Überwachung der WindowMenüZeile einschalten*)
WinMenuAktiv:=FALSE;
ELSIF and(events,Mouse2Event) THEN
(* WindowMenü wieder einschalten *)
ok:=InstallMenu( WindowFind(mx,my),MenuAdr);
IF ok THEN
Mo1h:=desky; (* WindowMenüzeile ist aktiv *)
MX:=0;MY:=0;MH:=0;MW:=0; (* Überwachung der WindowMenüzeile Auschalten*)
WinMenuAktiv:=TRUE;
END(*IF*);
ELSIF and(events,ButtonEvent) THEN
w:=WindowFind(mx,my);
IF w=win1 THEN
formret:=DoWindowDial(Appl,win1,InfoAdr,0);
IF formret>0 THEN CloseWindowDial(win1); END(*IF*);
ELSIF w=win2 THEN
formret:=DoWindowDial(Appl,win2,Info1Adr,0);
IF formret>0 THEN CloseWindowDial(win2); END(*IF*);
ELSIF w=win3 THEN
formret:=DoWindowDial(Appl,win3,Info2Adr,0);
IF formret>0 THEN CloseWindowDial(win3); END(*IF*);
ELSE
IF windowlist[w]#NIL THEN
IF windowlist[w]^.reference=txtAdr THEN
DoTextIconDia(w,mx,my);
ELSIF windowlist[w]^.reference=grafAdr THEN
DoGrafIconDia(w,mx,my);
END(*IF*);
END(*IF*);
END(*IF*);
END(*IF*);
UNTIL ENDE
END Auswahl;
BEGIN
RSCfileName :='WINDOWME.RSC';
Init;
win1:=-1;win2:=-1;win3:=-1;
OK:=InitResource(-1,TREE1,RSCfileName);
IF OK THEN Auswahl END(*IF*);
TerminateWindows;
Terminate;
END WinDemo.